/// 
/// MaDAson - Toolkit for Model Driven Software Development
/// 
/// Copyright [2006] Marcus Lankenau
/// 
/// Licensed under the Apache License, Version 2.0 (the "License");
/// you may not use this file except in compliance with the License.
/// You may obtain a copy of the License at
///  
///     http://www.apache.org/licenses/LICENSE-2.0
///  
/// Unless required by applicable law or agreed to in writing, software
/// distributed under the License is distributed on an "AS IS" BASIS,
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
/// See the License for the specific language governing permissions and
/// limitations under the License.
/// 

using System;
using System.Collections.Generic;
using System.Text;
using NUnit.Framework;


namespace Madason.MetaModel.Interfaces.Tests
{
	[TestFixture]
	public class TestImportStarUmlClass : TestImportStarUmlBase
	{
		[Test]
		public void TestLoadClass()
		{
			Model model = LoadModelFromResource("TestModel.uml");
			Assert.AreEqual(1, model.Namespaces.Count);
			Assert.AreEqual(1, model.Namespaces[0].Classes.Count);
		}

		[Test]
		public void TestClassAttributes()
		{
			Model model = LoadModelFromResource("TestModel.uml");
			Assert.AreEqual(1, model.Namespaces.Count);
			Assert.AreEqual(1, model.Namespaces[0].Classes.Count);

			Class cls = model.Namespaces[0].Classes[0];
			Assert.AreEqual("TestEntity", cls.Name);
			Assert.AreEqual("8f0w+y2cj0eyo8EVBE3nQAAA", cls.Id);
		}

		[Test]
		public void TestClassStereotype()
		{
			Model model = LoadModelFromResource("TestModel.uml");
			Assert.AreEqual(1, model.Namespaces.Count);
			Assert.AreEqual(1, model.Namespaces[0].Classes.Count);

			Class cls = model.Namespaces[0].Classes[0];
			Assert.AreEqual(Stereotype.Entity, cls.Stereotype);
		}



		[Test]
		public void TestSuperClass()
		{
			Model model = LoadModelFromResource("TestModel.uml");			
			Assert.AreEqual(1, model.Namespaces.Count);
			Assert.AreEqual(1, model.Namespaces[0].Namespaces.Count);
			Namespace childNs = model.Namespaces[0].Namespaces[0];

			Class superClass = childNs.FindClassByName("SuperClass");
			Class subClass = childNs.FindClassByName("SubClass");
			Assert.IsNotNull(superClass);
			Assert.IsNotNull(subClass);

			Assert.AreEqual(superClass, subClass.SuperClass);
			Assert.AreEqual(1, superClass.SubClasses.Count);
			Assert.AreEqual(subClass, superClass.SubClasses[0]);
		}

		[Test]
		public void TestClassTaggedValue()
		{
			Model model = LoadModelFromResource("TestModel.uml");
			Assert.AreEqual(1, model.Namespaces.Count);
			Assert.AreEqual(1, model.Namespaces[0].Namespaces.Count);
			Namespace childNs = model.Namespaces[0].Namespaces[0];

			Class tvClass = childNs.FindClassByName("ClassWithTaggedValue");
			Assert.AreEqual("SOMETABLE", tvClass.TaggedValues["table"]);
		}

	}
}
